package co.edu.uniquindio.logica;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import static javax.persistence.CascadeType.REMOVE;
/**
 * 
 * esta clase representa  una marca de automovil
 * en la logica de nuestro modelo de negocio
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
@Entity
@Table(name="Marca")
public class Marca implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * este atributo representa el nombre de la marca de auto y es la llave primaria de la clase
	 */	
	@Id
	private String nombre;
	/**
	 * este atributo representa la descripcion del la marca de auto
	 */
	private String descripcion;
	/**
	 * esta relacion representa que una marca tiene muchos modelos 
	 */
	@OneToMany(mappedBy = "marca", cascade = REMOVE)
	private List<Modelo> modelos;
	
	/**
	 * este metodo me permite crear una marca
	 * @param nombre
	 * @param descripcion
	 */
	public Marca(String nombre,String descripcion)
	{
		this.nombre=nombre;
		this.descripcion=descripcion;
		
	}
	/**
	 * este es un constructor que no recive parametros de la entidad 
	 * que todas las entidades deben tener
	 * 
	 */
	public Marca()
	{
		
	}
	/**
	 * metodo que permite obtener el nombre de la marca 
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}
	/**
	 * metodo que permite especificar el nombre de la marca
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	/**
	 * metodo que permite obtener la descripcion de la marca
	 * @return the descripcion
	 */
	public String getDescripcion() {
		return descripcion;
	}
	/**
	 * metodod que permite especificar la descripcion de la marca
	 * @param descripcion the descripcion to set
	 */
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return  nombre;
	}
	/**
	 * metodo que permite obtener los modelos que ahi registrados de esta marca
	 * @return the modelos
	 */
	public List<Modelo> getModelos() {
		return modelos;
	}
	/**
	 * metodo que permite especificar los modelos de esta marca
	 * @param modelos the modelos to set
	 */
	public void setModelos(List<Modelo> modelos) {
		this.modelos = modelos;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		return result;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Marca other = (Marca) obj;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		return true;
	}

}
